<?php

$userfile = datenbankfileNeuLesen("userfile");
 
/**
* B e n u t z e r 
* beinhaltet:
* - Benutzer anlegen (Font: benutzerBearbeitenAnzeigen() / Back: benutzerAnlegen())
* - Benutzer bearbeiten (Font: benutzerBearbeitenAnzeigen() / Back: benutzerBearbeiten())
* - Benutzer löschen (Font: benutzerLesen() / Back: benutzerLoeschen())
* Helfer:
* - benutzerEingabeUeberpruefen()
* - benutzerEingabeFehlerAuswerten();
* - benutzerIdVergeben()
* - benutzerNameVergeben()
*/

function benutzerBearbeitenAnzeigen($einstellen) {
	global $hinweis;
	global $userfile;
	global $benutzerSId;
	global $einstellen;
	global $meldung;
	
	// Variablen setzten 
	$name              = "";
	$mail              = "";
	$vars              = "";
	$recht             = "";
	$i                 = 0;
	$token             = md5(uniqid(rand(), true));
	$_SESSION['token'] = $token;
	
	// Benutzer anlegen
	if (isset($_POST['neuerBenutzer'])  || ($einstellen == "neu" && $meldung != "")) {
		// Bei erneutem Aufruf mit Fehler
		if ($meldung != "") {
			if (isset($_GET['name']))  $name  = htmlentities($_GET['name']);
			if (isset($_GET['mail']))  $mail  = htmlentities($_GET['mail']);
		}
		// Ausgeben
		$tmp = new Template(templateUrl.'admin_benutzer_anlegen.tpl');
		$tmp->setContent(array('name'  => $name,
							   'mail'  => $mail,							 
							   'token' => $token));
		echo $tmp->vorlage;
	// Benutzer bearbeiten
	} else {
		// Benutzer suchen
		foreach($userfile as $BenutzerDatenbankReihe) {
			$BenutzerDatenbank = explode("\t",$BenutzerDatenbankReihe);
			if (strpos($BenutzerDatenbankReihe,"<?") !== false) continue;
			// if (eregi("<\?",$BenutzerDatenbankReihe)) continue;
			if ("" == trim($BenutzerDatenbankReihe)) continue;
			if ($einstellen != trim($BenutzerDatenbank[0])) continue;
			if (string2bool($BenutzerDatenbank[4])) {
				$GT = "checked='checked'";
				$GF = "";
			} else {
				$GT = "";
				$GF = "checked='checked'";
			}
			$_SESSION['idA'] = $BenutzerDatenbank[0];
			$vars = array('name'       => $BenutzerDatenbank[1],
						  'mail'       => $BenutzerDatenbank[2],
						  'pass'       => $BenutzerDatenbank[3],
						  'GT'         => $GT,
						  'GF'         => $GF,
						  'id'         => $BenutzerDatenbank[0],
						  'token'      => $token,
						  );
			break;
		}
		// Anzeigen
		$tmp = new Template(templateUrl.'admin_benutzer_einzel.tpl');
		$tmp->setContent($vars);
		echo $tmp->vorlage;
	}
}

function benutzerAnlegen() {
	global $userfile;
	$benutzerId = "";
	if (isset($_POST['benutzerAnlegen'])) {
		if( empty($_POST['token']) || $_POST['token'] != $_SESSION['token'] ) die;
		// Variablen zuweisen
		$benutzerName     = htmlentities($_POST['name']);
		$benutzerMail     = htmlentities($_POST['mail']);
		$pass1            = htmlentities($_POST['pass']);
		$pass2        	  = htmlentities($_POST['pass2']);
		$gravatarBenutzen = htmlentities($_POST['gravatarBenutzen']);
		$neueUserID       = false;
		// Überprüfen ob die eingabe richtig ist, wenn nicht zurück
		if (benutzerEingabeUeberpruefen("neu",$benutzerName,$benutzerMail,$gravatarBenutzen,"on",$pass1,$pass2)) $benutzerPass = md5($pass1);
		while (!$neueUserID) {
			$benutzerId = rand(1,9999999);
			if (!benutzerIdVergeben($benutzerId)) $neueUserID = true;
		}
		$buffer = "$benutzerId\t$benutzerName\t$benutzerMail\t$benutzerPass\t$gravatarBenutzen";
		$datei = @fopen(dataUrl."user.php","a");
		if (!$datei) echo "ERROR: FILE NOT FOUND";
		else {
			fwrite ($datei,$buffer); 
			fclose ($datei);
			$userfile = datenbankfileNeuLesen("userfile");
		}
		unset($_SESSION['token']);
	}
}

function benutzerBearbeiten () {
	global $userfile;
	global $benutzerSI;
	if (isset($_POST['id'])) $id = $_POST['id'];
	if (isset($_POST['benutzerAendern'])) {
		if( empty($_POST['token']) || $_POST['token'] != $_SESSION['token'] ) die;
		// Variablen zuweisen
		$alles            = "";
		$name             = htmlentities($_POST['name']);
		$mail             = htmlentities($_POST['mail']);
		$benutzerNameAlt  = htmlentities($_POST['nameAlt']);
		$benutzerMailAlt  = htmlentities($_POST['mailAlt']);
		$benutzerPassAlt  = htmlentities($_POST['passAlt']);
		$pass1            = htmlentities($_POST['adminpass']);
		$pass2            = htmlentities($_POST['adminpass2']);
		$gravatarBenutzen = htmlentities($_POST['gravatarBenutzen']);		
		// Prüfen ob die eingabe gültig ist und ein neues Passwort festgelegt wurde
		if (isset($_POST['passwortJN'])) $passJN = htmlentities($_POST['passwortJN']); else $passJN = "off";
		if ($passJN == "on") {
			if (benutzerEingabeUeberpruefen($id,$name,$mail,$gravatarBenutzen,$passJN,$pass1,$pass2)) $passwort = md5($pass1);
		} else {
			if (benutzerEingabeUeberpruefen($id,$name,$mail,$gravatarBenutzen,$passJN="",$pass1="",$pass2="")) $passwort = $benutzerPassAlt;
		}		
		
		// Alles was nicht geändert werden soll in in die Variable $alles schreiben
		foreach ($userfile as $zeile) {
			$ding = explode("\t", $zeile);
			if (strpos($zeile,"<?") !== false) continue;
			// if(eregi("<\?",$zeile)) continue;
			if ("" == trim($zeile)) continue;
			if ($ding[0] == $id) continue;
			$alles .= $zeile;
		}
		// geänderter User und die alten in die Variable $buffer schreiben
		$buffer = "<? die(\"Kein Zugang zu dieser Datei !!!\")?>\n$id\t$name\t$mail\t$passwort\t$gravatarBenutzen\n".$alles; 
		// Falls man seinen eigenen Benutzer geändert hat, die Session aktualisieren, damit man nicht rausfliegt
		if ($_SESSION['name'] == "$benutzerNameAlt") {
			$_SESSION['name'] = $name;
			$_SESSION['pass'] = $passwort;
		}
		// Speichern
		$datei = @fopen(dataUrl."user.php","w");
		if (!$datei) echo "ERROR: FILE NOT FOUND";
		else {
			fwrite ($datei,$buffer); 
			fclose ($datei);
			$userfile = datenbankfileNeuLesen("userfile");
		}
		unset($_SESSION['token']);
		unset($_SESSION['idA']);
	}
}

function benutzerLoeschen() {
	global $userfile;
	global $benutzerSId;
	if (isset($_POST['benutzerLoeschen'])) {
		if( empty($_POST['token']) || $_POST['token'] != $_SESSION['token'] ) die;
		// Variablen setzten
		$alles  = "";
		$buffer = "";
		if (isset($_POST['id'])) {
			$id = htmlentities($_POST['id']);
			// Den eigenen Benutzer und Besitzer darf man nicht löschen!
			if ($id != $benutzerSId && !istBesitzer($id)) {
				// Alles ausßer den zu löschenden User in die Variable $alles schreiben
				foreach ($userfile as $zeile) {
					$ding = explode("\t", $zeile);
					if (strpos($zeile,"<?") !== false) continue;
					// if(eregi("<\?",$zeile)) continue;	
					if ($ding[0] == $id) continue;
					$alles = $alles.$zeile;
				}		
				// Speichern
				$buffer = "<? die(\"".ADMIN_BACKEND_NOPERMISSIONTD."\")?>\n".$alles;
				$datei = @fopen(dataUrl."user.php","w+");
				if (!$datei) echo "ERROR: FILE NOT FOUND";
				else {
					fwrite ($datei,$buffer); 
					fclose ($datei);
					$userfile = datenbankfileNeuLesen("userfile");
				}
			} else echo "<script language=\"javascript\">alert('".ADMIN_BACKEND_DELETEUSER."');</script>";
		} else header("Location: index.php?admin=user&meldung=20");
		unset($_SESSION['token']);
	}
}

function benutzerLesen() {
	global $userfile;
	global $benutzerSId;
	$token             = md5(uniqid(rand(), true));
	$_SESSION['token'] = $token;
	$erl               = "";
	$name              = "";
	$i                 = 0;
	$benutzer          = "";
	// Alle Benutzer lesen und ausgeben, 
	// bei dem eigenem Benutzer und Besitzer ist die Radiobox
	// deaktiviert weil man seinen eigenen Benutzer nicht löschen darf
	foreach ($userfile as $reihe) {
		$BenutzerDatenbank = explode("\t",trim($reihe));
		if (strpos($reihe,"<?") !== false) continue;
		if (trim($BenutzerDatenbank[0]) == $benutzerSId || istBesitzer(trim($BenutzerDatenbank[0]))) $erl = "disabled='disabled'";
		else $erl="";
		$name = "<a href='?admin=user&amp;einstellen=$BenutzerDatenbank[0]'>$BenutzerDatenbank[1]</a>";
		$benutzer[$i] = array('avatar' => gravatar(trim($BenutzerDatenbank[2]),20,trim($BenutzerDatenbank[3])), 'id' => $BenutzerDatenbank[0], 'name' => $name, 'mail' => $BenutzerDatenbank[2], 'disabledJN' => $erl);
		$i++;
	}
	$tmp = new Template(templateUrl.'admin_benutzer_zeigen.tpl');
	$tmp->setContent("BENUTZER",$benutzer);
	$tmp->setContent("token",$token);
	echo $tmp->vorlage;
}

/**
* Benutzer Helfer
*
*/

// Überprüft die eingabe, bei Falscher eingabe springt die Funktion zur alten seite
// Wenn alles OK ist wird TRUE zurück gegeben
function benutzerEingabeUeberpruefen($ziel,$name,$mail,$gravatarBenutzen,$passJN="",$pass1="",$pass2="") {
	global $benutzerSId;
	$name   = trim($name);
	$mail   = trim($mail);
	while (!isset($link)) {
		$link = "OK";
		if ($passJN=="on") {
			$pass1 = trim($pass1);
			$pass2 = trim($pass2);
			if (empty($pass1))      	     $link = "2";
			if (empty($pass2))      	     $link = "2";
			if ($pass1 != $pass2)  		     $link = "2";
		}
		if (!checkBool($gravatarBenutzen))   $link = "14";
		if (!checkEmail($mail))     	     $link = "26";
		if (empty($mail))           	     $link = "25";
		if (empty($name))          		     $link = "23";
		if (!isset($_POST['benutzerAendern'])) {
			if (benutzerNameVergeben($name)) $link = "24";
		}
		if ($ziel != "neu") {
			if (!istBesitzer($benutzerSId)) {
				if(empty($ziel) || empty($benutzerSId) || $ziel != $_SESSION['idA']) {
					$ziel = $_SESSION['idA'];
					$link = "19";
				}
			}
		}
	}
	if ($link != "OK") {
		header("Location: index.php?admin=user&einstellen=$ziel&meldung=$link&name=$name&mail=$mail");
		die (ADMIN_BACKEND_ERROR);
	} else 	return true;
}


// Guckt ob die übergebene Benutzer ID in der übergebene Datei schon vergeben ist 
// Wenn sie schon vergeben ist wird TRUE zurück gegeben andernfalls FALSE
function benutzerIdVergeben($bId) {
	global $userfile;
	foreach ($userfile as $zeile) {
		list ($id) = explode("\t", $zeile);
		// if(eregi("<\?",$zeile)) continue;	
		if (strpos($zeile,"<?") !== false) continue;
		if ($id == $bId) return true;
	}
	return false;
}

function benutzerNameVergeben($name) {
	global $userfile;
	foreach ($userfile as $zeile) {
		if (strpos($zeile,"<?") !== false) continue;
		// if(eregi("<\?",$zeile)) continue;	
		$zeileSplit = explode("\t",trim($zeile));
		if (trim($zeileSplit[1]) == trim($name)) return true;
	}
	return false;
}

?>
